import axios from 'axios'
import store from "@/store";
import {Message} from 'element-ui'
// axios实例
const service = axios.create({
    baseURL: '/', // 请求根路径 因为已经配置了代理api，这里不进行配置
    timeout: 10000, // 请求超时时间
    headers: {
        "Content-Type": "application/json;charset=utf-8"
    },
    withCredentials: false, // 跨域实例
    responseType: 'json', //响应数据格式
    //设置请求格式为json 暂时不需要
    // transformRequest: [(data) =>{
    //   return JSON.stringify(data)
    // }]
    // 如果返回数据是字符串并且包含{ 则转换成object
    transformResponse: [(res) => {
        if (typeof res == 'string' && res.startsWith("{")) {
            return JSON.parse(res)
        }
        return res
    }]
})

// 请求拦截器
// 请求拦截器绑定到 service 实例
service.interceptors.request.use(
    //请求开始前的操作
    config => {
        store.commit("admin/LOAD_TOKEN");
        const token = store.getters["admin/getToken"] || store.getters["user/getToken"];
        console.log(token)
        if (token) {
            config.headers["authorization"] = "Bearer " + token;
            // console.log("Token added to request headers:", token); // 日志记录
        } else {
            console.warn("No valid token found for the request."); // 日志记录
        }
        return config
    },
    // 请求异常时的操作
    error => {
        return Promise.reject(error);
    }
)

service.interceptors.response.use(
    res => {
        // 对响应数据进行处理
        if (res.data.code === 200) {
            let authorization = res.headers['authorization'];
            if (authorization) {
                const parts = authorization.split(" ");
                if (parts.length === 3 && parts[0] === "Bearer") {
                    const [, tokenType, token] = parts; // 分离 tokenType 和 token
                    console.log(token)
                    if (tokenType === "admin") {
                        //提交到admin模块
                        store.commit("admin/SET_TOKEN", token);
                    } else {
                        // 提交到user模块
                        store.commit("user/SET_TOKEN", token);
                    }
                }
            }
            return res.data;
        }
        // 状态码为非正常响应,抛出异常
        Message({
            type: 'error',
            message: res.data.message
        })
        // return Promise.reject(new Error(res.data.message));
    },
    err => {
        Message.error(err.response?.data?.message || '请求失败,请稍后再试');
        return Promise.reject(err);
    }
)

export default service